"use strict";
// 练习1
// 实现一个convert函数(通过Object.defineProperty)
// 传入参数为一个浅层对象，要求可以为这个浅层对象添加getter和setter
// 并重新定义它的取值与设值行为
// getter和setter行为需要使用console.log来进行输出
function convert(obj) {
    var _loop_1 = function (key) {
        var previousValue = obj[key]; // 存储当前对象属性值，直接读存会导致无限循环
        // 设置getter、setter时注意通过闭包访问，不要直接读取，否则会造成死循环
        Object.defineProperty(obj, key, {
            get: function () {
                console.log("\u4F60\u8BFB\u53D6\u4E86\u5F53\u524D\u5BF9\u8C61\u7684\u5C5E\u6027" + previousValue);
            },
            set: function (newValue) {
                console.log("\u4F60\u4FEE\u6539\u4E86\u5F53\u524D\u5BF9\u8C61\u7684\u5C5E\u6027\uFF0C\u65E7\u503C\u4E3A" + previousValue + ",\u65B0\u503C\u4E3A" + newValue);
                previousValue = newValue;
            }
        });
    };
    // 遍历所有的对象属性
    for (var key in obj) {
        _loop_1(key);
    }
    return obj;
}
// 测试用例
var test_obj = convert({
    name: 'Leon',
    age: 18,
    isMale: true
});
test_obj.name;
test_obj.age;
test_obj.isMale;
test_obj.age = 81;
test_obj.name = "jack";
test_obj.isMale = false;
